【MySQL】WHERE - 対象レコード・データの条件設定(取得・更新・削除)

【MySQL】WHERE - 対象レコード・データの条件設定(取得・更新・削除)

MySQLのWHEREについて解説します。

検証環境

WHERE

WHERE句は操作対象レコード(データ)の条件を設定する句です。

データの取得や更新、削除などの操作において、レコードの値で対象を絞り込むことができます。

基本構文

WHERE 条件

WHEREに続いて条件を記述します。

条件は比較演算や論理演算で表すことが可能です。

サンプル

以下のテーブルに対する、取得・更新・削除とWHEREのサンプルを示します。

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

取得(SELECT WHERE

データを取得するSELECT文はWHERE句を組み合わせると、条件にマッチしたデータのみ取得します。

___ih_hl_start
mysql> SELECT * FROM items WHERE name = 'Apple';
___ih_hl_end
+-------+-------+-------+
| name  | price | stock |
+-------+-------+-------+
| Apple |   200 |    10 |
+-------+-------+-------+
1 row in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

nameカラムの値が'Apple'のレコードのみ取得するよう条件を設定しています。

また、論理演算で複雑な条件を表現できます。

___ih_hl_start
mysql> SELECT * FROM items WHERE name = 'Apple' OR stock = 3;
___ih_hl_end
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    10 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
+-----------+-------+-------+
3 rows in set (0.00 sec)

この場合、OR演算子による論理和の条件となっており、“nameカラムの値が'Apple'またはstockカラムの値が3”のレコードのみ取得するよう条件を設定しています。

更新(UPDATE SET WHERE

データを更新するUPDATE SET文はWHERE句を組み合わせると、条件にマッチしたデータのみ更新します。

___ih_hl_start
mysql> UPDATE items SET stock = 99 WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    99 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |     1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

nameカラムの値が'Apple'のレコードのみ更新するよう条件を設定しています。

また、論理演算で複雑な条件を表現できます。

___ih_hl_start
mysql> UPDATE items SET stock = 99 WHERE name = 'Apple' OR name = 'Grapes';
___ih_hl_end
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Apple     |   200 |    99 |
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |    99 |
+-----------+-------+-------+
4 rows in set (0.00 sec)

この場合、OR演算子による論理和の条件となっており、“nameカラムの値が'Apple'またはGrapes”のレコードのみ更新するよう条件を設定しています。

削除(DELETE WHERE

レコードを削除するDELETE文はWHERE句を組み合わせると、条件にマッチしたレコードのみ削除します。

___ih_hl_start
mysql> DELETE FROM items WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
| Grapes    |  3500 |    99 |
+-----------+-------+-------+
3 rows in set (0.00 sec)

WHERE name = 'Apple'の部分がWHERE句です。

nameカラムの値が'Apple'のレコードのみ削除するよう条件を設定しています。

また、論理演算で複雑な条件を表現できます。

___ih_hl_start
mysql> DELETE FROM items WHERE name = 'Apple' OR name = 'Grapes';
___ih_hl_end
Query OK, 2 rows affected (0.00 sec)

mysql> SELECT * FROM items;
+-----------+-------+-------+
| name      | price | stock |
+-----------+-------+-------+
| Orange    |   150 |     3 |
| Pineapple |  1100 |     3 |
+-----------+-------+-------+
2 rows in set (0.00 sec)

この場合、OR演算子による論理和の条件となっており、“nameカラムの値が'Apple'またはGrapes”のレコードのみ更新するよう条件を設定しています。